let installer = (function () {
    const constructor = {};

    Object.defineProperty(constructor, "version", {
        value: VERSION,
        enumerable: true,
        writeable: false
    });

    let installer = function construct() {
        this.version = VERSION;
    };
    
    installer.prototype.install = function (name, target={}) {
        if (!constructor[name]) {
            Object.defineProperty(constructor, name, {
                value: {},
                enumerable: true,
                writeable: false
            });
        }

        for (let key in target) {
            Object.defineProperty(constructor[name], key, {
                value: target[key],
                enumerable: true,
                writeable: false
            });
        }

        return true;
    };

    installer.prototype.append = function (name, target) {
        Object.defineProperty(constructor, name, {
            value: target,
            enumerable: true,
            writeable: false
        });
    }

    installer.prototype.get = function () {
        return constructor;
    }

    return new installer;
})();